package livret.modele;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;

/**
 * La classe formateur
 * Un formateur est un enseignant. Il peut enseigner plusieurs matières
 * S'il est affecté à un étudiant, alors il devient tuteur
 * @author Solohery RAMANANARIVO, Fawzia CHABOUNI, Luc RABARIJAONA
 */
public class Formateur {

   private int id_formateur;
   private String nom;
   private String prenom;
   private String mail;
   private String tel;
   private String fonction;
   private String etablissement;
   private String id_ldap;
   private String sigle;
   private String password;


    public Formateur(int id_formateur, String nom, String prenom, String mail, String tel, String fonction, String etablissement, String idLdap, String sigle) {
        this.id_formateur = id_formateur;
        this.nom = nom;
        this.prenom = prenom;
        this.mail = mail;
        this.tel = tel;
        this.fonction = fonction;
        this.etablissement = etablissement;
        this.id_ldap = idLdap;
        this.sigle = sigle;
    }


   

    public String getEtablissement() {
        return etablissement;
    }

    public String getFonction() {
        return fonction;
    }

    public int getIdFormateur() {
        return id_formateur;
    }

    public String getIdLdap() {
        return id_ldap;
    }

    public String getMail() {
        return mail;
    }

    public String getNom() {
        return nom;
    }

    public String getPrenom() {
        return prenom;
    }

    public String getSigle() {
        return sigle;
    }

    public String getTel() {
        return tel;
    }

    public void setEtablissement(String etablissement) {
        this.etablissement = etablissement;
    }

    public void setFonction(String fonction) {
        this.fonction = fonction;
    }

    public void setIdFormateur(int idFormateur) {
        this.id_formateur = idFormateur;
    }

    public void setIdLdap(String idLdap) {
        this.id_ldap = idLdap;
    }

    public void setMail(String mail) {
        this.mail = mail;
    }

    public void setNom(String nom) {
        this.nom = nom;
    }

    public void setPrenom(String prenom) {
        this.prenom = prenom;
    }

    public void setSigle(String sigle) {
        this.sigle = sigle;
    }

    public void setTel(String tel) {
        this.tel = tel;
    }

    /**
     * Méthode pour récupérer la liste des étudiants dont le tuteur est ce formateur
     * @return la liste des etudiants qu'un enseignant encadre
     * @throws SQLException
     */

    public ArrayList<Etudiant> getListeEtudiants()throws SQLException {
        ArrayList<Etudiant> etudiants = new ArrayList<Etudiant>();
        Etudiant etudiant = null;
        Connection connexion = null;
        Statement select = null;
        ResultSet rs = null;
        try {
              connexion = DataBase.getConnection();
              select = connexion.createStatement();
              String sql = "SELECT id_etudiant, nom, prenom, email, no_etudiant FROM etudiant WHERE id_tuteur="
              + this.id_formateur+";" ;
              rs = select.executeQuery(sql);
              while (rs.next()) {
                    etudiant = new Etudiant(rs.getInt("id_etudiant"), rs.getString("nom"),
                    rs.getString("prenom"), rs.getString("email"), rs.getString("no_etudiant"));
                    etudiants.add(etudiant);
              }
        } finally {
                DataBase.close(rs);
                DataBase.close(select);
                DataBase.close(connexion);
            }
        return etudiants;
    }

/**
 * Méthode pour récupérer la liste des commentaires
 * @return la liste des messages que le formateur a envoyé
 * @throws SQLException
 */
    public ArrayList<Commentaire> getListeCommentairesCours(int id_destinataire,int id_cours)throws SQLException {
        ArrayList<Commentaire> commentaires = new ArrayList<Commentaire>();
        Commentaire commentaire = null;
        Connection connexion = null;
        Statement select = null;
        ResultSet rs = null;

        try {
                  connexion = DataBase.getConnection();
                  select = connexion.createStatement();
                  String sql = "SELECT date,id_auteur,id_destinataire,id_coursdestinataire, nomauteur, prenomauteur, contenu "
                      + "FROM commentaire WHERE id_destinataire="+id_destinataire
                      +" AND id_coursdestinataire="+id_cours+";" ;
              rs = select.executeQuery(sql);
              while (rs.next()) {
                    commentaire = new Commentaire(rs.getString("date"),
                            rs.getString("contenu"), rs.getInt("id_auteur"),
                            rs.getInt("id_destinataire"),rs.getInt("id_coursdestinataire"),
                            rs.getString("nomauteur"),rs.getString("prenomauteur"));
                commentaires.add(commentaire);
              }
        } finally {
                    DataBase.close(rs);
                    DataBase.close(select);
                    DataBase.close(connexion);
        }
        return commentaires;
    }

    public ArrayList<Cours> getListeCours() throws SQLException{
         ArrayList<Cours> cours = new ArrayList<Cours>();
        Cours cour = null;
        Connection connexion = null;
        Statement select = null;
        ResultSet rs = null;

        try {
              connexion = DataBase.getConnection();
              select = connexion.createStatement();
              String sql = "SELECT c.id_cours, c.enseignant_id, c.intitule"
                      + " FROM cours c , formateur f WHERE f.id_formateur="+ this.getIdFormateur()
                      +" AND c.enseignant_id = f.id_formateur;" ;
              rs = select.executeQuery(sql);
              while (rs.next()) {
                    cour = new Cours(rs.getInt("id_cours"),
                            rs.getInt("enseignant_id"),rs.getString("intitule"));
                cours.add(cour);
              }
        } finally {
              DataBase.close(rs);
              DataBase.close(select);
              DataBase.close(connexion);
        }
            return cours;
    }


    /**
     * Ajoute un commentaire dans le carnet d'un étudiant
     * @param commentaire
     * @throws SQLException
     */
    public void PosterCommentaire(String date, String newContenu,int id_destinataire, int id_coursdestinataire) throws SQLException{
        Connection connexion = null;
        Statement select = null;
        ResultSet rs = null;

        try {
            connexion = DataBase.getConnection();
            select = connexion.createStatement();
            String sql = "INSERT INTO commentaire (id_auteur,id_destinataire,id_coursdestinataire, date,nomAuteur,prenomAuteur,contenu)"
                    + " VALUES ('"+this.getIdFormateur()+"','"+id_destinataire+"','"+id_coursdestinataire+
                    "','"+date+"','"+this.getNom()+"','"+this.getPrenom()+"','"+newContenu+"');";
            PreparedStatement pstmt = connexion.prepareStatement(sql);
            pstmt.executeUpdate();
      
        } finally {
              DataBase.close(rs);
              DataBase.close(select);
              DataBase.close(connexion);
            }
    }

     /** Récupère un formateur par son id/password.
   * Si le formateur n'est pas trouvé, renvoie null.
   * <br/>Requiert<blockquote> <code>id != null && !login.matches("^(\\s)*$")
   * <br/>password != null</code>
   * </blockquote>
   * @throws SQLException si problème avec le SGBD.
   */

     public static Formateur getByLoginPassword(final String id,final String password)throws SQLException {
        assert id != null && !id.matches("^\\s*$");
        assert password != null;
        //
        Formateur formateur = null;
        Connection cx = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        int id_f = Integer.parseInt(id);
        try {
              cx = DataBase.getConnection();
              String sql = "SELECT id_formateur, nom, prenom, email, tel,fonction, etablissement, sigle,id_ldap "
                      + "FROM formateur WHERE id_formateur=? AND password=?";
              ps = cx.prepareStatement(sql);
              ps.setInt(1, id_f);
              ps.setString(2, password);
              rs = ps.executeQuery();
              if (rs.next()) {
                formateur = new Formateur(rs.getInt("id_formateur"), rs.getString("nom"), rs.getString("prenom"),
                        rs.getString("email"),rs.getString("tel"), rs.getString("fonction"),rs.getString("etablissement"),
                        rs.getString("id_ldap"),rs.getString("sigle"));
              }
        } finally {
          DataBase.close(rs);
          DataBase.close(ps);
          DataBase.close(cx);
        }
        return formateur;
        }

}
